#include "descomposicionSDV.h"
void calcularDescomposicion(Imagen& laImagen)
{
	Matriz *mat=laImagen.dameLaMatrizDeLaImagen();
	Matriz *matTras=new Matriz(mat->cantidadDeFilas(),mat->cantidadDeColumnas());
	matTras->copiarMatriz(mat);
	matTras->trasponer();
	Matriz* aporat=new Matriz(mat->cantidadDeFilas(),mat->cantidadDeFilas());
	Matriz* atpora=new Matriz(mat->cantidadDeColumnas(),mat->cantidadDeColumnas());
	
	//aporat=A*A^t
	aporat->multiplicacion(mat,matTras);
	//atpora=A^t*A
	atpora->multiplicacion(matTras,mat);
	//la matriz U
	Matriz* baseU;
	//la matriz V
	Matriz* baseV;
	//la matriz S;
	Matriz* autovalores;
	
	//calculo los autovectores para A*A^t
	Matriz temp(aporat->cantidadDeFilas(),aporat->cantidadDeFilas());
	temp.copiarMatriz(aporat);
	metodoHouseHolder(&temp);
	autovalores = autovalores_qr(temp);
	baseU = autovector(temp,*autovalores);
	
	//calculo los autovectores para A^t*A
	Matriz temp1(atpora->cantidadDeFilas(),atpora->cantidadDeFilas());
	temp1.copiarMatriz(atpora);
	metodoHouseHolder(&temp1);
	autovalores = autovalores_qr(temp);
	baseV = autovector(temp1,*autovalores);
	
	//guarda la imagen comprimida
	laImagen.guardarDatos(baseU,baseV,autovalores);
	
	delete matTras;
	delete aporat;
	delete atpora;
	delete baseU;
	delete baseV;
	delete autovalores;
}
